def day_of_year(year, month, day):
    """
    判断某年某月某日是这一年的第几天
    """
    days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if (year % 4 == 0 and year % 100!= 0) or (year % 400 == 0):
        days_in_month[2] = 29
    return sum(days_in_month[:month]) + day


def multiplication_table():
    """
    输出9x9乘法口诀表
    """
    for i in range(1, 10):
        for j in range(1, i + 1):
            print(f"{j}*{i}={i * j}", end="\t")
        print()


def count_primes_under_1000():
    """
    判断1000中有多少个素数，并输出所有素数
    """
    primes = []
    for num in range(2, 1000):
        is_prime = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                is_prime = False
                break
        if is_prime:
            primes.append(num)
    return primes


def prime_factorization(n):
    """
    输入一个任意正整数，输出分解质因数
    """
    factors = []
    d = 2
    while n > 1:
        while n % d == 0:
            factors.append(d)
            n //= d
        d += 1
    result = "*".join(map(str, factors))
    print(f"{n}={result}")


def grade_judgment():
    """
    利用条件运算符的嵌套来完成此题：学习成绩>=90分的同学用A表示，60-89分之间的用B表示，60分以下的用C表示。（要求有键盘输入）
    """
    score = float(input("请输入成绩: "))
    grade = "A" if score >= 90 else ("B" if 60 <= score < 90 else "C")
    print(grade)


def digit_analysis():
    """
    输入一个不多于6位的正整数，要求：一、求它是几位数，二、逆序打印出各位数字
    """
    num = input("请输入一个不多于6位的正整数: ")
    print(f"它是{len(num)}位数")
    print(num[::-1])


def count_characters():
    """
    输入一行字符串，分别统计出其中英文字母、空格、数字和其它字符的个数
    """
    s = input("请输入一行字符串: ")
    letters = 0
    spaces = 0
    digits = 0
    others = 0
    for char in s:
        if char.isalpha():
            letters += 1
        elif char.isspace():
            spaces += 1
        elif char.isdigit():
            digits += 1
        else:
            others += 1
    print(f"英文字母个数: {letters}")
    print(f"空格个数: {spaces}")
    print(f"数字个数: {digits}")
    print(f"其它字符个数: {others}")


def sum_of_numbers():
    """
    求s=a+aa+aaa+aaaa+aa...a的值，其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)，几个数相加有键盘控制。
    """
    a = int(input("请输入数字a: "))
    n = int(input("请输入相加的项数n: "))
    total_sum = 0
    num = 0
    for _ in range(n):
        num = num * 10 + a
        total_sum += num
    print(total_sum)


def find_perfect_numbers():
    """
    一个数如果恰好等于它的因子之和，这个数就称为“完数”。例如6=1＋2＋3.编程，找出1000以内的所有完数
    """
    for num in range(1, 1000):
        factors = []
        for i in range(1, num):
            if num % i == 0:
                factors.append(i)
        if sum(factors) == num:
            print(num)


def sum_of_fraction_sequence():
    """
    有一分数序列：2/1，3/2，5/3，8/5，13/8，21/13...求出这个数列的前N项之和，N由键盘输入。
    """
    n = int(input("请输入项数N: "))
    sum_value = 0
    a, b = 2, 1
    for _ in range(n):
        sum_value += a / b
        a, b = a + b, a
    print(sum_value)


def sum_of_factorials():
    """
    输入任意数N，求1+2!+3!+...+N!的值（注意实数范围）
    """
    n = int(input("请输入N: "))
    sum_value = 0
    factorial = 1
    for i in range(1, n + 1):
        factorial *= i
        sum_value += factorial
    print(sum_value)


def find_number():
    """
    一个整数，它加上100后是一个完全平方数，再加上268又是一个完全平方数，请问该数是多少？
    """
    for num in range(-10000, 10000):
        n1 = int((num + 100) ** 0.5)
        n2 = int((num + 100 + 268) ** 0.5)
        if n1 ** 2 == num + 100 and n2 ** 2 == num + 100 + 268:
            print(num)


def print_diamond():
    """
    输入任意奇数N，按如下要求打印出图案（菱形）
    """
    n = int(input("请输入奇数N: "))
    for i in range(1, n + 1, 2):
        print(" " * ((n - i) // 2) + "*" * i)
    for i in range(n - 2, 0, -2):
        print(" " * ((n - i) // 2) + "*" * i)


def rabbit_count():
    """
    有一对兔子，从出生后第3个月起每个月都生一对兔子，小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，问每个月的兔子总数为多少？
    """
    months = int(input("请输入月数: "))
    if months == 1 or months == 2:
        print(1)
    else:
        f1, f2 = 1, 1
        for _ in range(3, months + 1):
            f3 = f1 + f2
            f1 = f2
            f2 = f3
        print(f3)


def sort_numbers():
    """
    对10个数进行排序
    """
    numbers = []
    for _ in range(10):
        num = int(input("请输入一个数: "))
        numbers.append(num)
    numbers.sort()
    print(numbers)


def matrix_diagonal_sum():
    """
    任意输入一个3x3矩阵，求矩阵对角线元素之和
    """
    matrix = []
    for _ in range(3):
        row = list(map(int, input("请输入矩阵一行（空格分隔）: ").split()))
        matrix.append(row)
    sum_value = 0
    for i in range(3):
        sum_value += matrix[i][i] + matrix[i][2 - i]
    print(sum_value // 2)


def insert_into_sorted_array():
    """
    有一个已经排好序的数组（元素数量大于10）。从键盘任意输入一个数，要求按原来的规律将它插入数组中。
    """
    arr = list(map(int, input("请输入已排好序的数组（空格分隔）: ").split()))
    num = int(input("请输入要插入的数: "))
    index = 0
    while index < len(arr) and arr[index] < num:
        index += 1
    arr.insert(index, num)
    print(arr)


def shift_numbers():
    """
    有n个整数，使其前面各数顺序向后移m个位置，最后m个数变成最前面的m个数。
    """
    n = int(input("请输入整数个数n: "))
    numbers = list(map(int, input("请输入整数（空格分隔）: ").split()))
    m = int(input("请输入移动的位数m: "))
    m %= n
    result = numbers[-m:] + numbers[:-m]
    print(result)


def last_remaining():
    """
    有n个人围成一圈，顺序排号。从第一个人开始报数（从1到3报数），凡报到3的人退出圈子，问最后留下的是原来第几号的那位。
    """
    n = int(input("请输入人数n: "))
    people = list(map(int, range(1, n + 1)))
    index = 0
    while len(people) > 1:
        index = (index + 2) % len(people)
        del people[index]
    print(people[0])


def sum_series(n):
    """
    编写一个函数，输入n为偶数时，调用函数求1/2+1/4+...+1/n,当输入n为奇数时，调用函数1/1+1/3+...+1/n(利用指针函数，Python中模拟实现)
    """
    if n % 2 == 0:
        return sum(1 / i for i in range(2, n + 1, 2))
    return sum(1 / i for i in range(1, n + 1, 2))